Power Query 用Excel玩转商业智能数据处理

《Power Query 用Excel玩转商业智能数据处理》一书由 朱仕平 著。Power Query在Office 2016中已经被作为内置的工具嵌入【数据】选项卡中。Power Query集成了Access和Excel的功能,可以对数据进行可视化菜单操作,完成对数据的提取(Extract)、转换(Transform)、加载(Load),也就是信息管理中ETL管理数据源的三个基本功能。

Power Query

有了Power Query,我们不需要借助VBA,就可以轻松地将工作簿中的所有工作表合并成一张工作表,也可以吧一个文件夹下的所有子文件夹中的工作簿全部合并成一张工作表。将合并后的数据加载到Power Pivot中可以进行后期大量的数据整理和分析。对于查询Web数据,Power Query也是一把好手,我们想要的数据基本都可以通过Power Query呈现出来。
Power Query是一个非常方便的工具,只要在工作中有思路,有想法,就可以吧一些复杂的表格,根据自己的需求,转换成可以方便统计的数据连接。然后对数据连接进行加载、统计、分析、图标展示。
关于Power Query的各个功能如何使用,基本都可以在本书中找到解答。例如:选择列、删除列、保留行、删除行、排序、拆分列、分组依据、数据类型、将第一行作为标题、替换值、合并查询、追加查询、转置表格等。书中都有详细的步骤和截图说明。

M语言

使用Power Query菜单的操作过程都会被记录成一个公式,这种公式被称为M语言公式。

  • M语言基础
    M语言实际就是通过函数公式将结果传递给变量,每个变量对应一个步骤,每个变量的步骤都环环相扣;这些公式可以使用现成的函数,也可以使用自定义函数。需要注意的是,公式中的函数和参数对大小写都非常敏感。
    每个查询公式都指向前一个步骤的变量名称,前一个步骤的变量名称就是一个实际的结果,这个结果可以是Value、Record、List、Table。如果公式太长,可以在中间任意地方强制换行;但每个公式在最后都应该输入一个逗号,然后换行到第二个步骤。
    直到最后一个步骤时,才不再需要逗号,将最后一个查询步骤作为最终的结果,使用in语句把这个步骤传递回【查询编辑器】
    下面主要对M语言的部分函数参数和部分函数做一个简单的介绍。若在实际应用中需要使用到其它函数,可在书中进一步查找。加粗显示的函数为在GE实习过程中用到的一些参数和函数。

  • 部分函数参数说明

Occurence : 获取位置信息

参数 说明
Occurence.First 第1次位置
Occurence.Last 最后1次位置
Occurence.All 所有位置

ComparisonCriteria : 比较规则

参数 说明
Order.Ascending 升序
Order.Descending 降序

JoinKind : 连接种类

参数 说明
JoinKind.Inner 内部连接
JoinKind.LeftOuter 左外部连接
JoinKind.RightOuter 右外部连接
JoinKind.FullOuter 完全外部连接
JoinKind.LeftAnti 左反连接
JoinKind.RightAnti 右反连接
  • Text类函数
分类 函数名 概述
1 计算 Text.Length 返回字符串长度
2 转换 Text.From 返回Value的文本表现形式
3 获取 Text.Range 从指定位置开始返回指定个数的字符串
4 判断 Text.Contains 判断A字符串是否包含B字符串
5 判断 Text.PositionOf 判断B字符串在A字符串中的位置
6 判断 Text.PositionOfAny 判断A字符串中另一字符集合list列表的位置
7 转换 Text.Upper 所有字母转换为大写
8 转换 Text.Trim 清除字符串两端指定的字符
9 转换 Text.Combine 将字符集list列表合并成字符串
  • Number类函数
分类 函数名 概述
1 常量 Number.NaN 代表0/0,返回NaN
2 随机数 Number.Random 返回介于0~1的小数
3 随机数 Number.RandomBetween 返回指定值之间的小数
4 转换 Number.FromText 从文本数值转换为数字
5 舍入 Number.Round 舍入到指定位数
6 计算 Number.Abs 返回绝对值
7 三角函数 Number.Cos 余弦
8 其他函数 Number.Log 返回指定底数的数字对数
  • Time类函数
分类 函数名 概述
1 计算 Time.Hour 返回时间的小时数
2 计算 Time.Minute 返回时间的分钟数
3 计算 Time.Second 返回时间的秒钟数
4 智能时间 Time.ToRecord 返回时间中的时、分、秒的Recond记录
5 智能时间 Time.StartOfHour 返回当时小时的起始值
6 智能时间 Time.EndOfHour 返回当时小时的结束值
7 转换 Time.From 将给定的value返回时间
8 转换 Time.FromText 从文本表示的Text返回时间
8 转换 Time.ToText 返回指定文本样式的日期
  • Date类函数
分类 函数名 概述
1 计算 Date.Year 返回日期的年份
2 计算 Date.QuarterOfYear 返回日期的季度数
3 智能日期 Date.EndOfDay 返回日期当天的结束值
4 判断 Date.IsLeapYear 判断日期是否在闰年
5 转换 Date.ToText 返回指定文本样式的日期
  • DateTime类函数
分类 函数名 概述
1 计算 DateTime.Date 返回日期时间的日期部分
2 转换 DateTime.ToText 返回指定文本格式的日期时间
3 智能时间 DateTime.IsInCurrentHour 判断时间是否是系统时间的当前小时
  • Duration类函数
分类 函数名 概述
1 计算 Duration.Days 获取持续时间的日期部分
2 创建 Duration.ToRecord 获取持续时间的各部分Record
3 转换 Duration.TotalDays 将持续时间换算成总天数
  • Record类函数
分类 函数名 概述
1 计算 Record.FieldCount 返回记录的字段数
2 判断 Record.HasFields 检查是否包含某个字段
3 选择 Record.Field 返回指定字段的值
4 转换 Record.AddField 添加一个字段
5 序列化 Record.FromTable Table转换成Record
  • List类函数
分类 函数名 概述
1 计算 List.Sum 计算非空值的总和
2 判断 List.IsEmpty 判断list是否为空
3 选择 List.Select 按给定条件选择项目
4 操作 List.Sort 排序
5 集合 List.Combine 合并多个list为新list
6 创建 List.DateTimes 根据规则创建日期时间列表
  • Table类函数
分类 函数名 概述
1 转换 Table.ToRows 转换成行的list表格
2 创建 Table.FromRows 从多行list创建表格
3 计算 Table.RowCount 统计表的行数
4 判断 Table.IsEmpty 判断表格是否为空表
5 选择 Table.SelectRows 根据指定条件选择行
6 选择 Table.SelectColumns 仅选择某些列
7 操作 Table.Sort 排序
8 操作 Table.RenameColumns 重命名列标题
9 操作 Table.AddColumn 添加新列
10 集合 Table.NestedJoin 合并查询
11 操作 Table.ExpandTableColumn 展开表格
  • 文件类函数
函数名 概述
1 Excel.CurrentWorkbook 从当前表导入
2 File.Contents 从文件夹导入
3 Excel.Workbook 从指定路径导入表格
4 Csv.Document 从文本文件导入表格